<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  
  <meta name="generator" content="Hugo 0.98.0" />

  
  <meta name="description" content="走在通往幸福的路上">
  

  
  <link rel="apple-touch-icon" sizes="180x180" href="https://blog.v5u.win/apple-touch-icon.png">

  
  <link rel="icon" type="image/png" sizes="32x32" href="https://blog.v5u.win/favicon-32x32.png">

  
  <link rel="icon" type="image/png" sizes="16x16" href="https://blog.v5u.win/favicon-16x16.png">

  
  <link rel="manifest" href="https://blog.v5u.win/site.webmanifest">

  
  <link rel="mask-icon" href="https://blog.v5u.win/safari-pinned-tab.svg" color="">

  <meta name="msapplication-TileColor" content="">

  <meta name="theme-color" content="">

  
  <link rel="stylesheet" href="https://blog.v5u.win/css/bootstrap.min.css" />

  
  <title>使用Autolayout xib实现动态高度的TableViewCell | 为吾优</title>
  

  <style>
body {
  min-width: 300px;
}

.custom-navbar {
  margin-bottom: 1em;
  height: 60px;
}

.custom-navbar a {
  display: inline-block; 
  padding: 18px 0;
  margin-right: 1em; 
  font-weight: bold; 
}

.custom-navbar a:hover,
.custom-navbar a:focus {
  text-decoration: none; 
}

@media print {
  .custom-navbar {
    display: none;
  }
}

article {
  padding-bottom: 1em;
}

img {
  max-width: 100%;
}


body {
  background-color: #fff;
}



body {
  color: #212529;
}



a {
  color: #007bff;
}



a:hover,
a:focus {
  color: #0056b3;
}



.custom-navbar {
  background-color: #212529;
}



.custom-navbar a {
  color: rgba(255,255,255,.75);
}



.custom-navbar a:hover,
.custom-navbar a:focus {
  color: rgba(255,255,255,1);
}



.container {
  max-width: 800px;
}





</style>
</head>

<body>
  <nav class="custom-navbar">
  <div class="container">
    
    <a href="/">文章</a>
    
    <a href="/tags/">标签</a>
    
    <a href="/about/">关于</a>
    
    <a href="/index.xml">RSS</a>
    
  </div>
</nav>
  
  <div class="container">
    <article>
      <h1>使用Autolayout xib实现动态高度的TableViewCell</h1>
<p>文章来源于<a href="http://itony.me/381.html">http://itony.me/381.html</a></p>
<h2 id="创建xib文件">创建Xib文件</h2>
<p>首先将Cell做好布局，调整到满意的位置和宽度，然后开始做Autolayout设定。</p>
<p>Autolayout操作方式有两种，一种是选择目标后，使用右下角的工具栏；另一种是直接使用右键拖拽目标，在弹出的菜单中选择限制项。当选择的目标比较小的时候，可以打开左侧的菜单，在这里做拖拽操作一样是可以的。个人感觉后者更方便一些。</p>
<p>开始之前，先来介绍下使用的基本工具吧。</p>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<p>第一个按钮是和对齐有关的，就是控制多个元素（Lable, Button等）的统一约束。例如我们需要让标题和内容按照左，就选择标题和内容元素，选择Leading Edges设置为5即可。</p>
<p><a href="http://itony.me/wp-content/uploads/2013/12/Autolayout_Align.png"><img src="http://itony.me/wp-content/uploads/2013/12/Autolayout_Align.png" alt="Autolayout_Align"></a></p>
<p>第二个按钮是和元素位置固定有关的限制条件，直接看图吧：</p>
<p><a href="http://itony.me/wp-content/uploads/2013/12/Autolayout_Pin.png"><img src="http://itony.me/wp-content/uploads/2013/12/Autolayout_Pin.png" alt="Autolayout_Pin"></a></p>
<p>右侧能够看到当前选择元素限制条件的列表：</p>
<p><a href="http://itony.me/wp-content/uploads/2013/12/Autolayout_Inspector_Constrainsts-list.png"><img src="http://itony.me/wp-content/uploads/2013/12/Autolayout_Inspector_Constrainsts-list.png" alt="Autolayout_Inspector_Constrainsts list"></a>
这里有两个参数，“Content Hugging Priority”和“Content Compression Resistance Priority”，感觉不太好理解，栈爆上找到一篇解释，讲的挺好的：<a href="http://stackoverflow.com/questions/15850417/cocoa-autolayout-content-hugging-vs-content-compression-resistance-priority">Cocoa Autolayout: content hugging vs content compression resistance priority</a></p>
<p>有时候想要一个元素的间距是一个动态值，例如距离右侧至少10pt（即&gt;=10pt），那么可以在上图中点击右侧按钮(齿轮)进入详细设置：</p>
<p><a href="http://itony.me/wp-content/uploads/2013/12/Autolayout_Constraint_Relation-Config.png"><img src="http://itony.me/wp-content/uploads/2013/12/Autolayout_Constraint_Relation-Config.png" alt="Autolayout_Constraint_Relation Config"></a></p>
<p>第三个按钮是有关清除限制条件、根据限制更新视图大小的工具。个人比较常用的是清除限制条件，有时候设置错了很麻烦，直接清除掉重新来就行了。</p>
<p><a href="http://itony.me/wp-content/uploads/2013/12/Autolayout_Resolve-Auto-Layout-Issues.png"><img src="http://itony.me/wp-content/uploads/2013/12/Autolayout_Resolve-Auto-Layout-Issues.png" alt="Autolayout_Resolve Auto Layout Issues"></a></p>
<p>上面这些就是常用到的一些限制条件了。个人觉得使用右键拖拽弹出的菜单选择更方便和直观一些，因为菜单中会根据拖拽内容动态显示可用项供我们选择，菜单如图</p>
<p><a href="http://itony.me/wp-content/uploads/2013/12/Autolayout_ShortAction.png"><img src="http://itony.me/wp-content/uploads/2013/12/Autolayout_ShortAction.png" alt="Autolayout_ShortAction"></a></p>
<p>大致就是这些了吧……</p>
<p>我来谈谈自己的用法。总体上是从上到下，从左到右做约束限制。在这个例子中，就是设置标题-&gt;内容-&gt;发帖人这样的顺序。</p>
<p><a href="http://itony.me/wp-content/uploads/2013/12/Autolayout_Example.png"><img src="http://itony.me/wp-content/uploads/2013/12/Autolayout_Example.png" alt="Autolayout_Example"></a></p>
<ol>
<li>
<p>设置标题的顶部和左侧距离，以及宽度（防止超出边界）。</p>
</li>
<li>
<p>设置内容的顶部（距离标题）和左侧距离，以及宽度。设置最大行数。</p>
</li>
<li>
<p>设置发帖人的顶部和左侧距离，以及高度。</p>
</li>
<li>
<p>设置发帖时间的顶部和左侧距离，距离右侧间距（防止内容过长）。</p>
</li>
<li>
<p><strong>关键步骤，设置发帖人距离底部距离，如果不设置这个参数，那么下面代码计算的Cell高度会永远是0。</strong></p>
</li>
</ol>
<p>多试一试，如果有错误或者缺少限制，XCode会有提示。它报出的错误一般都是必须修正的，但它给的自动修正建议有时并不是我们想要的（正确的），想清楚再添加。</p>
<h2 id="代码部分">代码部分</h2>
<p>使用了xib制作的Cell，那么在原来的项目代码中如何使用呢？看代码：</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<p>11</p>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
<p>16</p>
<p>17</p>
<p>18</p>
<p>19</p>
<p>20</p>
<p>21</p>
<p>22</p>
<p>23</p>
<p>24</p>
<p>25</p>
<p>26</p>
<p>27</p>
<p>28</p>
<p>29</p>
<p>30</p>
<p>31</p>
<p>32</p>
<p>33</p>
<p>34</p>
<p>35</p>
<p>36</p>
<p>37</p>
<!-- raw HTML omitted -->
<p><!-- raw HTML omitted -->static<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->NSString<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->*CellIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;CellIdentifier&quot;<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p> </p>
<p><!-- raw HTML omitted -->-<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->void<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->viewDidLoad<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	<!-- raw HTML omitted --><!-- raw HTML omitted -->//注册TableView中用于复用的Cell<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->self<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted --> registerNib<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->UINib<!-- raw HTML omitted --><!-- raw HTML omitted --> nibWithNibName<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;BBSPostContentCell&quot;<!-- raw HTML omitted --><!-- raw HTML omitted --> bundle<!-- raw HTML omitted --><!-- raw HTML omitted -->:nil<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted --> forCellReuseIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->:CellIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	<!-- raw HTML omitted --><!-- raw HTML omitted -->//&hellip;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->}<!-- raw HTML omitted --></p>
<p> </p>
<p><!-- raw HTML omitted -->//关键方法，获取复用的Cell后模拟赋值，然后取得Cell高度<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->-<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->CGFloat<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->UITableView<!-- raw HTML omitted -->&lt;span class=&ldquo;crayon-h&rdquo; style=&ldquo;margin: 0px; padding: 0px; outline: 0px; border: 0px; vertical-align: baseline; font-style: inherit; height: inherit; font-size: inherit !important;</p>
<p>line-height: inherit !important; color: rgb(0, 111, 224) !important;&quot;&gt; <!-- raw HTML omitted --><!-- raw HTML omitted --><em><!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted --> heightForRowAtIndexPath<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->NSIndexPath<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted --></em><!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->indexPath<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->BBSPostContentCell<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->*cell<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted --> dequeueReusableCellWithIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->:CellIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->NSDictionary<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->*dataSourceItem<!-- raw HTML omitted -->&lt;span class=&ldquo;crayon-h&rdquo; style=&ldquo;m</p>
<p>argin: 0px; padding: 0px; outline: 0px; border: 0px; vertical-align: baseline; font-style: inherit; height: inherit; font-size: inherit !important; line-height: inherit !important; color: rgb(0, 111, 224) !important;&quot;&gt; <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->self<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->dataSource<!-- raw HTML omitted --><!-- raw HTML omitted --> objectAtIndex<!-- raw HTML omitted --><!-- raw HTML omitted -->:indexPath<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->row<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->cell<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->titleLabel<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->text<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted -->  <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->dataSourceItem<!-- raw HTML omitted --><!-- raw HTML omitted --> valueForKey<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;title&quot;<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->cell<!-- raw HTML omitted -->&lt;span class=&ldquo;crayon-sy&rdquo; style=&ldquo;margin: 0px; padding: 0px; outline: 0px; border: 0px; vertical-align: baseline; font-style: in</p>
<p>herit; height: inherit; font-size: inherit !important; line-height: inherit !important; color: rgb(51, 51, 51) !important;&quot;&gt;.<!-- raw HTML omitted --><!-- raw HTML omitted -->contentLabel<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->text<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->dataSourceItem<!-- raw HTML omitted --><!-- raw HTML omitted --> valueForKey<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;body&quot;<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->   <!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->cell <!-- raw HTML omitted --><!-- raw HTML omitted -->setNeedsUpdateConstraints<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->cell <!-- raw HTML omitted --><!-- raw HTML omitted -->updateConstraintsIfNeeded<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->CGFloat<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted -->&lt;span class=&ldquo;crayon-v&rdquo; style=&ldquo;margin: 0px; padding: 0px; outline: 0px; border: 0px; vertical-align: base</p>
<p>line; font-style: inherit; height: inherit; font-size: inherit !important; line-height: inherit !important; color: rgb(0, 45, 122) !important;&quot;&gt;height<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->cell<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->contentView<!-- raw HTML omitted --><!-- raw HTML omitted --> systemLayoutSizeFittingSize<!-- raw HTML omitted --><!-- raw HTML omitted -->:UILayoutFittingCompressedSize<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->height<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->return<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->height<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->}<!-- raw HTML omitted --></p>
<p> </p>
<p><!-- raw HTML omitted -->//在cellForRowAtIndexPath中，按照常规方法做赋值就行了<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->-<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->UITableViewCell<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->*<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted -->&lt;span class=&ldquo;cra</p>
<p>yon-sy&rdquo; style=&ldquo;margin: 0px; padding: 0px; outline: 0px; border: 0px; vertical-align: baseline; font-style: inherit; height: inherit; font-size: inherit !important; line-height: inherit !important; color: rgb(51, 51, 51) !important;&quot;&gt;(<!-- raw HTML omitted --><!-- raw HTML omitted -->UITableView<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted --><em><!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted --> cellForRowAtIndexPath<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->NSIndexPath<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted --></em><!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->indexPath<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	<!-- raw HTML omitted --><!-- raw HTML omitted -->BBSPostContentCell<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->*cell<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted --> dequeueReusableCellWithIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->:CellIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted -->&lt;span class=&ldquo;crayon-t&rdquo; style=&ldquo;margin: 0px; padding: 0px; outline: 0px; border: 0px; vertical-align: baseline; font-style: inherit; height: inherit; font-weight: bold</p>
<p>!important; font-size: inherit !important; line-height: inherit !important; color: rgb(128, 0, 128) !important;&quot;&gt;NSDictionary<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->*dic<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->dataSource<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->indexPath<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->row<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->cell<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->titleLabel<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->text<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->dic<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;title&quot;<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->cell<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->contentLabel<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->text<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->dic<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;body&quot;<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->return<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->cell<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->}<!-- raw HTML omitted --></p>
<!-- raw HTML omitted -->
<p>2014.1.2: 在测试时发现这部分的代码还存在一些性能问题（整个表视图在更新时会卡顿），我会稍后补上。</p>
<p>我在使用Instruments分析发现，heightForRowAtIndexPath中调用dequeueReusableCellWithIdentifier会占用很多CPU资源，因此我试着不使用registerNib方法注册复用Cell，而在代码中手动处理，类似这样：</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<!-- raw HTML omitted -->
<p><!-- raw HTML omitted -->BBSPostContentCell<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->*cell&lt;/</p>
<p>span&gt;<!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted --> dequeueReusableCellWithIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->:CellIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->if<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->cell<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->==<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->nil<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->cell<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->NSBundle<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->mainBundle<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted -->&lt;span class=&ldquo;crayon-e &quot; style=&ldquo;margin: 0px; padding: 0px; outl</p>
<p>ine: 0px; border: 0px; vertical-align: baseline; font-style: inherit; height: inherit; font-size: inherit !important; line-height: inherit !important; color: teal !important;&quot;&gt; loadNibNamed<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;BBSPostContentCell&quot;<!-- raw HTML omitted --><!-- raw HTML omitted --> owner<!-- raw HTML omitted --><!-- raw HTML omitted -->:self<!-- raw HTML omitted --><!-- raw HTML omitted --> options<!-- raw HTML omitted --><!-- raw HTML omitted -->:NULL<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->0<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->NSLog<!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;cell loadNibNamed&quot;<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->}<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->else<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	<!-- raw HTML omitted --><!-- raw HTML omitted -->NSLog<!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;cell dequeueReusableCellWithIdentifier&quot;<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->}<!-- raw HTML omitted --></p>
<!-- raw HTML omitted -->
<p>这时我发现这里的Cell调用dequeueReusableCellWithIdentifier方法总是返回nil，因此每次都是从xib中加载，从而耗费了大量的资源。问题的原因我还不清楚，目前我的解决方法是，单独生成一个Cell用于在heightForRowAtIndexPath方法中计算高度。</p>
<p>其次，在[tableView reloadData]和[tableView insertRowsAtIndexPaths]时，底层会将所有行高重新计算，这个会占用大量的时间，因此我试着对行高做了缓存，暂时解决了这个问题。</p>
<h2 id="关于兼容性问题">关于兼容性问题</h2>
<p>由于Autolayout只能在iOS6.0以上版本使用，而根据友盟统计，目前6.0以下的用户大概还有8%左右（2013.12）。现在有两个办法解决：</p>
<ol>
<li>
<p>哥不在乎，放弃这些用户！（好霸气=。=）把项目的部署版本修改为6.0以上即可。</p>
</li>
<li>
<p>咳…咳…这个嘛，用户还是有必要支持的………恩，那我们来说说这个怎么兼容。</p>
</li>
</ol>
<p>思路很简单，我们告诉XCode，6.0以上版本使用Autolayout，以下的旧版本不要使用这个就可以了。</p>
<p>将原xib文件inspector中选择”Interface Builder Document”-&gt;”Build for”-&gt;”iOS 6.0 and Later”，告诉XCode，这个xib在6.0以上设备编译。</p>
<p>将xib文件拷贝一份副本，命名为”xxx_iOS5.xib”，在inspector中选择”Project Deployment Target”，也就是说使用项目部署目标版本（即最低版本5.0），并取消”Use Autolayout”选项。</p>
<p>在代码中根据系统版本加载不同的xib文件：</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<p>11</p>
<p>12</p>
<p>13</p>
<p>14</p>
<!-- raw HTML omitted -->
<p><!-- raw HTML omitted -->#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) <!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->(<!-- raw HTML omitted -->&lt;span class=&ldquo;crayon-sy&rdquo; style=&ldquo;margin: 0px; padding: 0px; outline: 0px; border: 0px; vertical-align: baseline; font-st</p>
<p>yle: inherit; height: inherit; font-size: inherit !important; line-height: inherit !important; color: rgb(51, 51, 51) !important;&quot;&gt;[<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->UIDevice<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->currentDevice<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted --> systemVersion<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted --> compare<!-- raw HTML omitted --><!-- raw HTML omitted -->:v<!-- raw HTML omitted --><!-- raw HTML omitted --> options<!-- raw HTML omitted --><!-- raw HTML omitted -->:NSNumericSearch<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->!=<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->NSOrderedAscending<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --></p>
<p> </p>
<p><!-- raw HTML omitted -->#define IS_SUPPORT_AUTOLAYOUT   SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@&quot;6.0&quot;)<!-- raw HTML omitted --></p>
<p> </p>
<p><!-- raw HTML omitted -->-<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->void<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->viewDidLoad<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	<!-- raw HTML omitted --><!-- raw HTML omitted -->if<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted -->&lt;span class=&ldquo;crayon-o&rdquo; style=&ldquo;margin: 0px; paddin</p>
<p>g: 0px; outline: 0px; border: 0px; vertical-align: baseline; font-style: inherit; height: inherit; font-size: inherit !important; line-height: inherit !important; color: rgb(0, 111, 224) !important;&quot;&gt;!<!-- raw HTML omitted --><!-- raw HTML omitted -->IS_SUPPORT_AUTOLAYOUT<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	    <!-- raw HTML omitted --><!-- raw HTML omitted -->//for iOS 5.x<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	    <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->self<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted --> registerNib<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->UINib<!-- raw HTML omitted --><!-- raw HTML omitted --> nibWithNibName<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;BBSPostContentCell_iOS5&quot;<!-- raw HTML omitted --><!-- raw HTML omitted --> bundle<!-- raw HTML omitted --><!-- raw HTML omitted -->:nil<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted --> forCellReuseIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->:CellIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	<!-- raw HTML omitted --><!-- raw HTML omitted -->}<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->else<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted -->&lt;span class=&ldquo;crayon-sy&rdquo; style=&ldquo;marg</p>
<p>in: 0px; padding: 0px; outline: 0px; border: 0px; vertical-align: baseline; font-style: inherit; height: inherit; font-size: inherit !important; line-height: inherit !important; color: rgb(51, 51, 51) !important;&quot;&gt;{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	    <!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->self<!-- raw HTML omitted --><!-- raw HTML omitted -->.<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted --> registerNib<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->[<!-- raw HTML omitted --><!-- raw HTML omitted -->UINib<!-- raw HTML omitted --><!-- raw HTML omitted --> nibWithNibName<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->@&quot;BBSPostContentCell&quot;<!-- raw HTML omitted --><!-- raw HTML omitted --> bundle<!-- raw HTML omitted --><!-- raw HTML omitted -->:nil<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted --> forCellReuseIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->:CellIdentifier<!-- raw HTML omitted --><!-- raw HTML omitted -->]<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->	<!-- raw HTML omitted --><!-- raw HTML omitted -->}<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->}<!-- raw HTML omitted --></p>
<!-- raw HTML omitted -->
<p>最后别忘了在高度计算时，区分下代码：</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>x !important; border: none !important; vertical-align: top !important; background-position: 0px 50%;&quot;&gt;<!-- raw HTML omitted --></p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<p>11</p>
<p>12</p>
<!-- raw HTML omitted -->
<p><!-- raw HTML omitted -->-<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->CGFloat<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->UITableView<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted --><em><!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->tableView<!-- raw HTML omitted --><!-- raw HTML omitted --> heightForRowAtIndexPath<!-- raw HTML omitted --><!-- raw HTML omitted -->:<!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->NSIndexPath<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted --></em><!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted --><!-- raw HTML omitted -->indexPath<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->if<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->(<!-- raw HTML omitted --><!-- raw HTML omitted -->IS_SUPPORT_AUTOLAYOUT<!-- raw HTML omitted --><!-- raw HTML omitted -->)<!-- raw HTML omitted -->&lt;span class=&ldquo;c</p>
<p>rayon-h&rdquo; style=&ldquo;margin: 0px; padding: 0px; outline: 0px; border: 0px; vertical-align: baseline; font-style: inherit; height: inherit; font-size: inherit !important; line-height: inherit !important; color: rgb(0, 111, 224) !important;&quot;&gt; <!-- raw HTML omitted --><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->        <!-- raw HTML omitted --><!-- raw HTML omitted -->//Autolayout部分代码，同上<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->        <!-- raw HTML omitted --><!-- raw HTML omitted -->//&hellip;..<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->        <!-- raw HTML omitted --><!-- raw HTML omitted -->return<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->height<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->}<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->else<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->{<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    	<!-- raw HTML omitted --><!-- raw HTML omitted -->//for iOS 5.x<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    	<!-- raw HTML omitted --><!-- raw HTML omitted -->//为了简单起见，就直接使用固定值了，当然如果你要自己为iOS5用户手动计算动态高度，也是可以的。<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->        <!-- raw HTML omitted --><!-- raw HTML omitted -->return<!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted -->81<!-- raw HTML omitted --><!-- raw HTML omitted -->;<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->    <!-- raw HTML omitted --><!-- raw HTML omitted -->}<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->}<!-- raw HTML omitted --></p>
<!-- raw HTML omitted -->
<p>完成了！</p>
<p><!-- raw HTML omitted -->原创文章，采用 <a href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a> 进行许可。
转载请注明：转载自 <a href="http://itony.me/">Tony's blog</a>，原文网址：<a href="http://itony.me/381.html">http://itony.me/381.html</a><!-- raw HTML omitted --></p>

    </article>
  </div>

  
  
  

  
</body>

</html>